Analiza czynników wpływających na poziom stresu
1. Cel projektu
Celem projektu jest przeprowadzenie analizy dotyczącej snu i codziennych nawyków w celu zidentyfikowania czynników wpływających na poziom stresu.
2. Opis zbioru badawczego
Zbiór danych Sleep Health and Lifestyle Dataset zawiera informacje dotyczące snu i codziennych nawyków. Składa się z 13 kolumn oraz 374 wierszy.
2.1. Opis zmiennych
nazwa zmiennej | opis | cecha | skala |
|---|---|---|---|
Gender | płeć (Male - mężczyzna, Female - kobieta) | jakościowa | normalna |
Age | wiek w latach | ilościowa | ilorazowa |
Occupation | zawód | jakościowa | porządkowa |
Sleep Duration | czas snu na dobę w godzinach | ilościowa | ilorazowa |
Quality of Sleep | subiektywna ocena jakości snu w skali od 1 do 10 | jakościowa | porządkowa |
Physical Activity Level | czas dziennej aktywności fizycznej w minutach | ilościowa | ilorazowa |
Stress Level | subiektywna ocena doświadczanego poziomu stresu w skali od 1 do 10 | jakościowa | porządkowa |
BMI Category | kategoria BMI (Underweight - niedowaga, Normal - waga prawidłowa, Overweight - nadwaga, Obese - otyłość) | jakościowa | porządkowa |
Blood Pressure | pomiar ciśnienia krwi wyrażany jako ciśnienie skurczowe na ciśnienie rozkurczowe w jednostce milimetrów słupa rtęci | ilościowa | ilorazowa |
Heart Rate | tętno spoczynkowe w uderzeniach na minutę | ilościowa | ilorazowa |
Daily Steps | liczba przebywanych dziennie kroków | ilościowa | ilorazowa |
Sleep Disorder | występowanie zaburzeń snu (None - brak, Insomnia - bezsenność, Sleep Apnea - bezdech senny) | jakościowa | porządkowa |
3. Przygotowanie danych
3.1. Braki danych
Zbiór nie zawiera braków danych.
3.2. Duplikacja wierszy
Ze względu na specyfikę naszych danych - dużą liczbę zmiennych kategorycznych oraz wartości zmiennych ilościowych podane z pewnymi przybliżeniami, nie usuwamy duplikatów występujących w zbiorze. Nie wprowadzają one istotnych zakłóceń w budowanych przez nas modelach, a ich usunięcie mogłoby przycznić się do utraty cennych spostrzeżeń.
3.3. Poprawność danych
Zmienna ‘BMI Category’ przyjmuje wartość ‘Normal Weight’, która nie jest zamieszczona w opisie zmiennych przygotowanym przez autorów zbioru danych. Zamieniamy tę wartość na wartość ‘Underweight’, która nie występuje we wczytanym zbiorze, natomiast jest uwzględniona w opisie.
3.4. Podstawowe statystyki
Basic Statistic | Age | Sleep Duration | Physical Activity Level | Heart Rate | Daily Steps |
|---|---|---|---|---|---|
minimum | 27.00 | 5.80 | 30.00 | 65.00 | 3,000.00 |
kwantyl pierwszy | 35.25 | 6.40 | 45.00 | 68.00 | 5,600.00 |
mediana | 43.00 | 7.20 | 60.00 | 70.00 | 7,000.00 |
średnia | 42.18 | 7.13 | 59.17 | 70.17 | 6,816.84 |
kwantyl trzeci | 50.00 | 7.80 | 75.00 | 72.00 | 8,000.00 |
maximum | 59.00 | 8.50 | 90.00 | 86.00 | 10,000.00 |
odchylenie standardowe | 8.67 | 0.80 | 20.83 | 4.14 | 1,617.92 |
Z powyższej Tabela 2 możemy odczytać podstawowe statystyki, które w kolejnym etapie posłużą nam do analizy elementów odstających.
Zauważamy, że różnica między średnią a medianą w każdej z kolumn jest niewielka. Podobnie w przypadku kwantyli, kwantyl pierwszy \((Q_1)\) i kwantyl trzeci \((Q_3)\) są równo oddalone od mediany, zatem oznacza to że rozkład danych jest symetryczny.
3.5. Elementy odstające
Do zidentyfikowania elementów odstających posłużyłyśmy się odległością Mahalanobisa. Niska wartość tej odległości mówi o tym, jak dany punkt jest blisko centrum rozkładu. Natomiast wysoka wartość jak dany punkt jest daleko od centrum rozkładu.
Id | Age | Sleep Duration | Physical Activity Level | Heart Rate | Daily Steps | Mahalanobis Distance | Outlier |
|---|---|---|---|---|---|---|---|
4 | 35 | 7.4 | 60 | 84 | 3,300 | 21.681 | TRUE |
5 | 38 | 7.4 | 60 | 84 | 3,300 | 21.273 | TRUE |
6 | 49 | 8.1 | 85 | 86 | 3,700 | 33.778 | TRUE |
51 | 49 | 8.1 | 85 | 86 | 3,700 | 33.778 | TRUE |
W naszym zbiorze wartości zbliżone do 20 są uważane za normalne. Wynika z tego, że odległości większe od 21 wskazują elementy odstające. Co przedstawia powyższa Tabela 3.
W kolejnym kroku usuwamy elementy odstające, aby ułatwić pracę na zbiorze.
4. Analiza zbioru badawczego
4.1. Rozkłady zmiennych
Poniższe wykresy przedstawiają rozkłady zmiennych.
Szerokości przedziałów w histogramach Rysunek 4 i Rysunek 5 zostały dobrane zgodnie z regułą Freedmana-Diaconisa:
\[ binwidth = \frac{2\cdot IQR(x)}{\sqrt[3]{n}} \]
gdzie \(IQR(x)\) to zakres międzykwartylowy, a \(n\) - liczba obserwacji.
4.2. Zależności między zmiennymi
Z wykresu Rysunek 6 możemy odczytać, że:
najniższy poziom stresu (3) występuje u osób w wieku powyżej 50 lat, które śpią powyżej 8 godzin dziennie,
tętno osób o niskim poziomie stresu (3 - 4) jest mniejsze niż 72 uderzenia na minutę, natomiast tętno osób o poziomie stresu 5 - 6 dla przeważającej liczby obserwacji jest mniejsze niż 77 uderzeń na minutę,
najwyższy poziom stresu (8) występuje u osób w przedziałach wiekowych 29 - 34 lata oraz 48 - 51 lat,
wraz ze zmniejszeniem długości snu wzrasta poziom odczuwanego stresu.
4.2.1. Test niezależności chi-kwadrat
Z wykresu Rysunek 7 możemy odczytać, że więcej mężczyzn niż kobiet nie cierpi na żadne zaburzenie snu. W dodatku dużo więcej kobiet niż mężczyzn cierpi na bezdech senny.
Wnioskujemy więc, że zaburzenie snu zależy od płci. Naszą obserwację potwierdzimy testem niezależności chi-kwadrat.
Hipoteza zerowa \((H_0)\): zaburzenie snu i płeć są niezależne
Hipoteza alternatywna \((H_1)\): zaburzenie snu i płeć nie są niezależne
Pearson's Chi-squared test
data: table(dane$Sleep.Disorder, dane$Gender)
X-squared = 59.588, df = 2, p-value = 1.15e-13
Wartość \(p\) jest mniejsza niż przyjęty poziom istotności \(0.05\), więc odrzucamy hipotezę zerową. Możemy więc twierdzić, że istnieje istotna zależność między zmiennymi zaburzenie snu i płeć.
4.3. Analiza wariancji
Z wykresu Rysunek 8 możemy odczytać, że zmienna wiek jest najbardziej zróżnicowana dla odczuwanego poziomu stresu równego 8, ponieważ w tej kategorii rozstęp międzykwartylowy jest największy. Na podstawie wykresu wnioskujemy również, że mediana wieku osób różni się w poszczególnych poziomach odczuwanego stresu. Aby porównać średnie wieku między grupami przeprowadzimy test ANOVA.
Najpierw sprawdzimy założenia:
- Normalność rozkładu
Do zbadania normalności rozkładu użyjemy testu Shapiro-Wilka.
Hipoteza zerowa \((H_0)\): dane pochodzą z populacji o rozkładzie normalnym
Hipoteza alternatywna \((H_1)\): dane pochodzą z populacji o innym rozkładzie niż normalny
Stress Level | p value |
|---|---|
3 | 0.0000000001628461 |
4 | 0.0000004202933639 |
5 | 0.0035287995317446 |
6 | 0.0000000751151247 |
7 | 0.0000001853488739 |
8 | 0.0000000015070829 |
W każdej z grup wartość \(p\) jest mniejsza niż przyjęty poziom istotności \(0.05\), zatem nie jest spełnione założenie o normalności rozkładu.
- Homogeniczność wariancji
Do zbadania homogeniczności wariancji użyjemy testu Bartletta.
Hipoteza zerowa \((H_0)\): Wariancje w grupach są równe
Hipoteza alternatywna \((H_1)\): Co najmniej jedna z grup ma inną wariancję niż pozostałe
Bartlett test of homogeneity of variances
data: dane$Age and dane$Stress.Level
Bartlett's K-squared = 94.704, df = 5, p-value < 2.2e-16
Wartość \(p\) jest mniejsza niż przyjęty poziom istotności \(0.05\), zatem odrzucamy hipotezę zerową.
4.3.1. Test Kruskala-Wallisa
Założenia o normalności rozkładu i homogeniczności wariancji nie są spełnione, zatem zastosujemy test Kruskalla-Wallisa.
Hipoteza zerowa \((H_0)\): Nie ma istotnych różnic w medianach wartości wieku między kategoriami poziomu stresu
Hipoteza alternatywna \((H_1)\): Istnieją istotne różnice w medianach wartości wieku między co najmniej jedną parą kategorii poziomu stresu
Kruskal-Wallis rank sum test
data: Age by Stress.Level
Kruskal-Wallis chi-squared = 179.84, df = 5, p-value < 2.2e-16
Wartość \(p\) jest mniejsza niż przyjęty poziom istotności \(0.05\), zatem odrzucamy hipotezę zerową na korzyść hipotezy alternatywnej. Oznacza to, że różnice median wieku między co najmniej jedną parą kategorii są istotne statystycznie.
4.3.2. Test Wilcoxona
Z testu Kruskala-Wallisa wnioskujemy, że istnieją znaczące różnice wieku osób między odczuwanymi poziomami stresu. Aby sprawdzić, które grupy się różnią zastosujemy test Wilcoxona z korektą Bonferroniego.
\(H_0\): Nie ma istotnych różnic w medianach wieku między poziomami stresu
\(H_1\): Istnieją istotne różnice w medianach wieku między poziomami stresu
Pairwise comparisons using Wilcoxon rank sum test with continuity correction
data: dane$Age and dane$Stress.Level
3 4 5 6 7
4 < 2e-16 - - - -
5 < 2e-16 1.00000 - - -
6 < 2e-16 2.6e-09 3.8e-10 - -
7 4.2e-15 0.24406 1.4e-05 2.7e-08 -
8 < 2e-16 1.00000 1.00000 0.00048 1.00000
P value adjustment method: bonferroni
Możemy odczytać, że \(p\) wartość jest większa niż \(0.05\) dla poziomów stresu 4 i 5, 4 i 7, 4 i 8, 5 i 8 oraz 7 i 8, zatem między tymi poziomami stresu nie ma istotnych różnic w medianach wieku. Pomiędzy pozostałymi poziomami stresu istnieją istotne różnice w medianach wieku.
5. Budowa modeli klasyfikacyjnych
5.1. Korelacje zmiennych
Do przedstawienia korelacji zmiennych użyjemy współczynnika korelacji rang Spearmana.
Z wykresu Rysunek 9 możemy odczytać, że zmienne ‘Stress Level’ i ‘Quality of Sleep’ są ze sobą silnie skorelowane. Jest to korelacja ujemna, co oznacza, że wraz ze wzrostem wartości jednej zmiennej maleją wartości drugiej zmiennej. Silna korelacja ujemna występuje również pomiędzy zmiennymi ‘Stress Level’ i ‘Sleep Duration’.
Pomiędzy zmiennymi ‘Stress Level’ i ‘Heart Rate’ występuje silna korelacja dodatnia, co świadczy o tym, że wraz ze wzrostem wartości jednej zmiennej rosną wartości drugiej zmiennej. Silne korelacje dodatnie występują również pomiędzy zmiennymi ‘Quality of Sleep’ i ‘Sleep Duration’ oraz ‘Daily Steps’ i ‘Physcial Activity Level’.
5.2. Podział zbioru na zbiór uczący i zbiór testowy
Dzielimy dane losowo na zbiór uczący i zbiór testowy w stosunku 80% do 20%.
5.3. Analiza dyskryminacyjna
Do analizy dyskryminacyjnej wykorzystujemy tylko zmienne ilościowe.
zmienna | ważność zmiennej |
|---|---|
Age | 3.522348 |
Sleep Duration | 4.852192 |
Physical Activity Level | 5.031611 |
Heart Rate | 3.742326 |
Daily Steps | 4.635133 |
W modelu analizy dyskryminacyjnej najważniejszą zmienną (posiadającą największą sumę wartości bezwzględnych wag dla wszystkich funkcji dyskryminacyjnych) jest ‘Physical Activity Level’.
Po przeprowadzeniu predykcji na zbiorze testowym, poprawnie zaklasyfikowano w sumie 57 obserwacji. Najwięcej błędów klasyfikacji pojawiło się dla obserwacji o poziomie odczuwanego stresu równym 4. Aż osiem z nich zaklasyfikowano jako poziom 5. Pięć obserwacji o poziomie stresu równym 8 zaklasyfikowano jako poziom 7. W pozostałych poziomach odczuwanego stresu błędnie zaklasyfikowano po jednej obserwacji.
\(77\%\) wszystkich przypadków zaklasyfikowano poprawnie.
5.4. Drzewo decyzyjne typu CART
Ze względu na dużą liczbę przyjmowanych wartości (kategorii) do budowy algorytmu drzewa decyzyjnego typu CART nie używamy zmiennych ‘Occupation’ i ‘Blood Pressure’. W ten sposób unikniemy przeuczenia modelu.
Drzewo decyzyjne typu CART Rysunek 11 służy do przypisania obserwacji do jednej z sześciu klas ‘Stress Level’. Na węzłach wyświetlony jest stosunek liczby poprawnych klasyfikacji do liczby wszystkich obserwacji w danym węźle. Procenty oznaczają procentowy udział obserwacji w danym węźle do wszystkich obserwacji zbioru uczącego.
zmienna | ważność zmiennej |
|---|---|
Sleep Duration | 154.43699 |
Age | 90.43250 |
Quality of Sleep | 83.55703 |
Physical Activity Level | 73.39194 |
Heart Rate | 62.02632 |
Daily Steps | 58.95960 |
BMI Category | 42.64169 |
Gender | 38.25826 |
Sleep Disorder | 17.76089 |
Najważniejszą zmienną w drzewie typu CART jest ‘Sleep Duration’.
Po wytrenowaniu modelu na zbiorze uczącym, jego skuteczność na zbiorze testowym wynosi \(96\%\).
5.5 Las losowy
Call:
randomForest(formula = Stress.Level ~ ., data = zbior_uczacy, ntree = 150)
Type of random forest: classification
Number of trees: 150
No. of variables tried at each split: 3
OOB estimate of error rate: 2.7%
Confusion matrix:
3 4 5 6 7 8 class.error
3 56 0 0 0 0 0 0.00000000
4 0 53 0 2 0 0 0.03636364
5 0 0 54 2 0 0 0.03571429
6 0 2 0 38 0 1 0.07317073
7 0 0 0 0 38 0 0.00000000
8 0 0 0 1 0 49 0.02000000
Błąd OOB (Out-of-Bag) odnosi się do próbek danych, które nie zostały użyte podczas trenowania modelu. Im niższa jego wartość tym jakość modelu jest lepsza. W naszym przypadku wynosi on \(2.7\%\).
Po przeprowadzeniu predykcji na zbiorze testowym, poprawnie zaklasyfikowano 72 obserwacje. Jak możemy zauważyć błąd klasyfikacji pojawił się dwa razy. Model dla obserwacji o poziomie odczuwanego stresu 6 i 7 przewidział poziom 4.
Po wytrenowaniu modelu na zbiorze uczącym, około \(97\%\) przypadków zaklasyfikowano zgodnie z rzeczywistymi wartościami.
Obserwujemy, że najbardziej istotnymi zmiennymi w przewidywaniach modelu są zmienne ‘Sleep Duration’, ‘Quality of Sleep’. Natomiast zmiennymi, które mają najmniejszy wpływ na model są zmienna ‘BMI Category’ oraz ‘Sleep Disorder’.
6. Podsumowanie
Model | Analiza dyskryminacyjna | Drzewo decyzyjne | Las losowy |
|---|---|---|---|
F1 score | 0.78 | 0.94 | 0.97 |
Accuracy | 0.77 | 0.96 | 0.97 |
Jak możemy zauważyć, modelem najmniej dopasowanym do danych okazał się model analizy dyskryminacyjnej, w którym dobrze zaklasyfikowano około \(77\%\) wszystkich przypadków. Najlepiej dopasowanym do danych modelem jest las losowy, który tylko nieznacznie przewyższa model drzewa decyzyjnego typu CART. W tych modelach skuteczność wyniosła \(97\%\) i \(96\%\).
Podział pracy
Cel projektu - Joanna Maciąg
Opis zbioru badawczego - Joanna Maciąg
Przygotowanie danych - Joanna Maciąg, Dominika Stępniewska
Analiza zbioru badawczego
4.1. Rozkłady zmiennych - Dominika Stępniewska
4.2. Zależności między zmiennymi - Dominika Stępniewska
4.3. Analiza wariancji - Dominika Stępniewska
Budowa modeli klasyfikacyjnych
5.1. Korelacje zmiennych - Dominika Stępniewska
5.3. Analiza dyskryminacyjna - Dominika Stępniewska
5.4. Drzewo decyzyjne typu CART - Dominika Stępniewska
5.5. Las losowy - Joanna Maciąg
Podsumowanie - Joanna Maciąg